package com.hyt.it.ogt.ykcj.mapper.grade;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.hyt.it.ogt.ykcj.domain.grade.ExamineeGradeInfo;
import com.hyt.it.ogt.ykcj.domain.vo.BatchArchiveGradeVo;
import com.hyt.it.ogt.ykcj.domain.vo.ExamindeGradeInfoRsp;
import com.hyt.it.ogt.ykcj.domain.vo.GradeAnalysisTotalDataVo;
import com.hyt.it.ogt.ykcj.domain.vo.QueryExamineeGradeVo;

/**
 * 考生成绩信息Mapper接口
 * 
 * @author admin
 * @date 2021-06-16
 */
public interface ExamineeGradeInfoMapper 
{
    /**
     * 查询考生成绩信息
     * 
     * @param gradeId 考生成绩信息ID
     * @return 考生成绩信息
     */
    public ExamineeGradeInfo selectExamineeGradeInfoById(String gradeId);

    /**
     * 查询考生成绩信息列表
     * 
     * @param examineeGradeInfo 考生成绩信息
     * @return 考生成绩信息集合
     */
    public List<ExamineeGradeInfo> selectExamineeGradeInfoList(ExamineeGradeInfo examineeGradeInfo);

    /**
     * 新增考生成绩信息
     * 
     * @param examineeGradeInfo 考生成绩信息
     * @return 结果
     */
    public int insertExamineeGradeInfo(ExamineeGradeInfo examineeGradeInfo);

    /**
     * 修改考生成绩信息
     * 
     * @param examineeGradeInfo 考生成绩信息
     * @return 结果
     */
    public int updateExamineeGradeInfo(ExamineeGradeInfo examineeGradeInfo);

    /**
     * 删除考生成绩信息
     * 
     * @param gradeId 考生成绩信息ID
     * @return 结果
     */
    public int deleteExamineeGradeInfoById(String gradeId);

    /**
     * 批量删除考生成绩信息
     * 
     * @param gradeIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteExamineeGradeInfoByIds(String[] gradeIds);
    
    /**
     * 根所考试信息Id查询已归档的成绩数量
     * @param @param examId
     * @param @return
     * @author qisw  
     */
    public int findExamineeGradeInfoFiledCountByExamInfoId(String examInfoId);

    /**
     * 批量插入考生成绩信息
     * @param list
     */
    public void batchInsertGradeInfo(List<ExamineeGradeInfo> list);

    /**
     * 根据考试id和身份证号查找是否已有存在的考试考生信息
     * @param examineeGradeInfo
     * @return
     */
    public List<ExamineeGradeInfo> findExistGradeInfo(ExamineeGradeInfo examineeGradeInfo);

    /**
     * 更新考生的档案号
     * @param archivesNo
     * @param idCode
     */
    public void updateExamineeArchiveNo(@Param("archivesNo") String archivesNo, @Param("idCode") String idCode);

    /**
     * 统计实际考试人数
     * @param examId 考试id
     * @return
     */
    public long countExamineeByExamId(@Param("examId") String examId);

    /**
     * 按年龄段统计考试合格人数
     * @param examId
     * @param startAge
     * @param endAge
     * @return
     */
    public long countPassByExamId(@Param("examId") String examId, @Param("startAge") String startAge, @Param("endAge") String endAge);

    /**
     * 按性别、区域等类型
     * @param examId
     * @param passFlag
     * @param groupType
     * @return
     */
    public List<GradeAnalysisTotalDataVo> countPassByExamIdAndType(@Param("examId") String examId, @Param("passFlag") String passFlag, @Param("groupType") String groupType);

    /**
     * 按区域统计每个区域的报名人数
     * @param examId
     * @return
     */
    public List<GradeAnalysisTotalDataVo> countExamineeByArea(@Param("examId") String examId);

    /**
     * 查询考生成绩列表
     * @param examineeGradeVo
     * @return
     */
    public List<ExamindeGradeInfoRsp> selectGradeInfoPageList(QueryExamineeGradeVo examineeGradeVo);

    public List<ExamindeGradeInfoRsp> selectExportGradeInfoList(BatchArchiveGradeVo examineeGradeVo);

    /**
     * 根据考生id查询考生成绩信息
     * @param gradeIds
     * @param examId
     * @return
     */
    public List<ExamineeGradeInfo> queryGradeInfoListByIds(@Param("gradeIds") List<String> gradeIds, @Param("examId") String examId, @Param("archivedStatus") String archivedStatus);

    /**
     * 批量更新考生信息
     * @param list
     */
    public void batchUpdateExamineeGradeInfo(List<ExamineeGradeInfo> list);

    /**
     * 查询未归档的考生成绩信息
     * @param examineeGradeVo
     * @return
     */
    public List<ExamineeGradeInfo> selectUnarchivedGradeInfoList(QueryExamineeGradeVo examineeGradeVo);

    public int seleExamineeCountById(@Param("examId") String examId);

    public int seleExamineeCountByPass(@Param("examId") String examId);
}
